package com.jacky.androidutils.utils.io;

import android.content.SharedPreferences;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;


public class CacheUtils {
	public static final String SP_NAME = "cache";
	/**
	 * 用sp获取缓存 key,value
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static boolean getBoolean(String key, boolean defaultValue) {
		SharedPreferences sp = ContextUtils.getContext().getSharedPreferences(
				SP_NAME, ContextUtils.getContext().MODE_PRIVATE);
		return sp.getBoolean(key, defaultValue);
	}
	/**
	 * 用sp设置缓存 key,value
	 * @param key
	 * @param value
	 */
	public static void setBoolean(String key, boolean value) {
		SharedPreferences sp = ContextUtils.getContext().getSharedPreferences(
				SP_NAME, ContextUtils.getContext().MODE_PRIVATE);
		sp.edit().putBoolean(key, value).commit();
	}

	/**
	 * 用sp设置缓存 key,value
	 */
	public static void setString(String key, String value) {
		SharedPreferences sp = ContextUtils.getContext().getSharedPreferences(
				"cache", ContextUtils.getContext().MODE_PRIVATE);
		sp.edit().putString(key, value).commit();
	}

	/**
	 * 获取缓存
	 */
	public static String getString(String key, String defaultValue) {
		SharedPreferences sp = ContextUtils.getContext().getSharedPreferences(
				"cache", ContextUtils.getContext().MODE_PRIVATE);
		return sp.getString(key, defaultValue);
	}

	/**
	 * 获取缓存 ,key 是url,value是Json串
	 * 
	 * @param url
	 *            文件名
	 * @return 文本内容
	 */
	public static String loadLocal(String url) {
		File dir = FileUtils2.getCacheDir();// 获取缓存所在的文件夹
		String filename = FileUtils2.md5(url);
		File file = new File(dir, filename);

		if (!file.exists()) {
			return null;
		}
		StringWriter sw = null;
		BufferedReader br = null;
		try {
			FileReader fr = new FileReader(file);
			br = new BufferedReader(fr);
			String firstStr = br.readLine();
			if (!firstStr.contains("useing")) {// 设置了过期时间
				long outOfDate = Long.parseLong(firstStr);
				if (System.currentTimeMillis() > outOfDate) {
					return null;
				}
			}
			sw = new StringWriter();
			String str = null;
			while ((str = br.readLine()) != null) {
				sw.write(str);
			}
			return sw.toString();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				sw.close();
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * 保存文本文件（如json串）到本地文件夹中
	 * 
	 * @param url 用md5加密为文件名
	 * @param json 文本内容
	 */
	public static void saveLoacl(String url, String json) {
		saveLoacl(url, json, 0);
	}

	/**
	 * 保存文本文件（如json串）到本地文件夹中
	 * 
	 * @param url 用md5加密为文件名
	 * @param json 文本内容
	 * @param outofdate 过期时间
	 *            
	 */
	public static void saveLoacl(String url, String json, long outofdate) {
		File dir = FileUtils2.getCacheDir();// 获取缓存所在的文件夹
		String filename = FileUtils2.md5(url);
		File file = new File(dir, filename);

		BufferedWriter bw = null;
		try {
			FileWriter fw = new FileWriter(file);
			bw = new BufferedWriter(fw);
			// 第一行写过期时间
			if (outofdate > 0) {
				bw.write(System.currentTimeMillis() + 1000 * outofdate + "");// 单位为秒
				bw.newLine();
			} else {
				bw.write("useing");// 单位为秒
				bw.newLine();
			}
			bw.write(json);// 把整个json文件保存起来
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
